﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Linq;

namespace skhukb.DB
{
    public class 주제BL
    {
        public static 주제 ROOT = null;

        static 주제BL()
        {
            using (var db = new DBDataContext()) {
                ROOT = db.주제.FirstOrDefault(p => p.제목 == "ROOT");
            }            
        }

        private static string 총제목(IList<주제> 목록, 주제 주제)
        {
            if (주제.ID == ROOT.ID) return "";
            var 부모주제 = 목록.First(p => p.ID == 주제.상위주제ID);
            return 총제목(목록, 부모주제) + "/" + 주제.제목;
        }

        public static void 총제목갱신(DBDataContext db)
        {
            var 주제목록 = db.주제.ToList();
            foreach (var 주제 in 주제목록) {
                var s = 총제목(주제목록, 주제);
                if (주제.총제목 != s) 주제.총제목 = s;
                if (주제.ID == ROOT.ID && 주제.총제목 != "/") 주제.총제목 = "/";
            }
        }

        public static bool 조상인가(주제 자손주제, 주제 조상주제)
        {
            주제 p = 자손주제.상위주제;
            while (true) {
                if (p.ID == 조상주제.ID) return true;
                if (p.ID == 주제BL.ROOT.ID) break;
                p = p.상위주제;
            }
            return false;            
        }

        public static bool 이동가능한가(DBDataContext db, 주제 주제, 주제 새부모주제)
        {
            if (주제.상위주제ID == 새부모주제.ID) return false;
            if (조상인가(자손주제: 새부모주제, 조상주제: 주제)) return false;
            return true;
        }
    }
}